package com.ww.springboot.springstudy.config;

import com.ww.springboot.springstudy.spi.IShout;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;

import javax.annotation.PostConstruct;
import java.util.ServiceLoader;

/**
 * SPI 用法   不需要主动创建对象或实体,在META-INF/services 下面创建相应的文件 spring会自动创建，
 * 需要使用时 使用ServiceLoader获取对应对象
 * SPI配合AbstractProcessor使用 可以使用代码自动创建相应的文件
 *
 * @author 🧑 ‍wanwei
 * @AutoService 使用自定义注解标注 被标注的文件就可以被加载并自动生成SPI文件
 * @since 2022-06-23 14:25
 */
@Configuration
public class IShoutConfiguration {

    @Autowired
    private ConfigTest configTest;

    @Autowired
    private ConfigTest configTest2;

    @Autowired
    private ConfigTest2 configTest21;

    @Autowired
    private ConfigTest2 configTest22;

    @PostConstruct
    private void init() {
        ServiceLoader<IShout> shouts = ServiceLoader.load(IShout.class);
        for (IShout s : shouts) {
            s.shout();
        }

        System.out.println(configTest);
        System.out.println(configTest2);
        System.out.println(configTest22);
        System.out.println(configTest21);
    }
}
